package com.wll.design.模板.service;

import javax.servlet.http.HttpServletRequest;

/**
 * @ClassName: AbstractMerchantService.java
 * @author: wanglulu
 * @version: 1.0.0
 * @Description: 3.3 模板方法使用
 * 一个抽象类，定义骨架流程（抽象方法放一起）
 * 确定的共同方法步骤，放到抽象类（去除抽象方法标记）
 * 不确定的步骤，给子类去差异化实现
 * 我们继续那以上的举例的业务流程例子，来一起用 模板方法优化一下哈：
 * <p>
 * 3.3.1 一个抽象类，定义骨架流程
 * 因为一个个请求经过的流程为一下步骤：
 * 查询商户信息
 * 对请求报文加签
 * 发送http请求出去
 * 对返回的报文验签
 * 所以我们就可以定义一个抽象类，包含请求流程的几个方法，方法首先都定义为抽象方法哈：
 * @createTime: 2021/11/25 14:51
 * <p>
 * 抽象类定义骨架流程（查询商户信息，加签，http请求，验签）
 */
public abstract class AbstractMerchantService {

    //查询商户信息
    void queryMerchantInfo() {
    }

    //加签
    void signature() {
    }

    //http 请求
    void httpRequest() {
    }

    // 验签
    void verifySinature() {
    }


    //模板方法流程
    Object handlerTempPlate(HttpServletRequest request) {
        //查询商户信息
        queryMerchantInfo();
        //加签
        signature();
        //http 请求
        httpRequest();
        // 验签
        verifySinature();
        return null;
    }

    // Http是否走代理（提供给子类实现）
    abstract boolean isRequestByProxy();

}
